package com.sky.config;

import com.sky.properties.AliOssProperties;
import com.sky.utils.AliOssUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

//配置类：用于创建AliOSSUtil对象
@Configuration
@Slf4j

public class OssConfiguration
{
    @Bean//方法级别注解: 通常标注在方法上，告诉Spring容器该方法将返回一个对象，该对象应该被注册为Spring应用上下文中的Bean
    @ConditionalOnMissingBean  //防止重复创建相同类型的Bean
    public AliOssUtil aliOssUtil(AliOssProperties aliOssProperties)
    {
        log.info("开始创建阿里云文件上传工具类对象：{}",aliOssProperties);
        return new AliOssUtil(aliOssProperties.getEndpoint(),
                aliOssProperties.getAccessKeyId(),
                aliOssProperties.getAccessKeySecret(),
                aliOssProperties.getBucketName());
    }
    //参数类型匹配: Spring 容器在调用 aliOssUtil 方法时，检测到参数类型为 AliOssProperties
    //Bean 查找: 容器在上下文中查找类型为 AliOssProperties 的 Bean 实例
    //自动装配: 找到对应的 Bean 后自动将其作为参数传入方法

    //构造函数参数问题:
    //AliOssUtil 的构造函数需要传入 endpoint、accessKeyId、accessKeySecret、bucketName 等参数
    //直接在AliOssUtil上加@Component 方式无法直接传递这些运行时才能确定的配置参数




}
